<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>linux下vim命令详解 - zhanglong0426 - 博客园</title>
<link type="text/css" rel="stylesheet" href="http://common.cnblogs.com/blog/css/common.css?id=2013061002"/>
<link id="MainCss" type="text/css" rel="stylesheet" href="http://common.cnblogs.com/Skins/summerGarden/style.css?id=2013061002"/>
<link type="text/css" rel="stylesheet" href="http://common.cnblogs.com/blog/css/common2.css"/>
<link type="text/css" rel="stylesheet" href="http://common.cnblogs.com/css/shStyle.css"/>
<link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/zhanglong0426/rss"/>
<link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/zhanglong0426/rsd.xml"/>
<link type="application/wlwmanifest+xml" rel="wlwmanifest" href="http://www.cnblogs.com/zhanglong0426/wlwmanifest.xml"/>
<script src="http://common.cnblogs.com/script/jquery.js" type="text/javascript"></script>  
<script type="text/javascript">
var currentBlogApp = 'zhanglong0426';
</script>
<script src="http://common.cnblogs.com/blog/script/common.js?id=2013061002" type="text/javascript"></script> 
<script src="http://common.cnblogs.com/script/json2.js" type="text/javascript"></script>
<script type="text/javascript" src="http://common.cnblogs.com/script/syntaxHighlighter.js"></script>
</head>
<body>
<a name="top"></a>

<!--done-->
<div id="home">
<div id="header">
	<div id="blogTitle">
	<a id="lnkBlogLogo" href="http://www.cnblogs.com/zhanglong0426/"><img id="blogLogo" src="/Skins/custom/images/logo.gif" alt="返回主页" /></a>			
		
<!--done-->
<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/zhanglong0426/">zhanglong0426</a></h1>
<h2></h2>



		
	</div><!--end: blogTitle 博客的标题和副标题 -->
	<div id="navigator">
		
<ul id="navList">
	<li><a id="MyLinks1_HomeLink" class="menu" href="http://www.cnblogs.com/">博客园</a></li>
	<li><a id="MyLinks1_MyHomeLink" class="menu" href="http://www.cnblogs.com/zhanglong0426/">首页</a></li>
	<li><a href="http://news.cnblogs.com/">新闻</a></li>
	<li><a id="MyLinks1_NewPostLink" class="menu" rel="nofollow" href="http://www.cnblogs.com/zhanglong0426/admin/EditPosts.aspx?opt=1">新随笔</a></li>
	<li><a id="MyLinks1_ContactLink" accesskey="9" class="menu" rel="nofollow" href="http://space.cnblogs.com/msg/send/zhanglong0426">联系</a></li>
	<li><a id="MyLinks1_Admin" class="menu" rel="nofollow" href="http://www.cnblogs.com/zhanglong0426/admin/EditPosts.aspx">管理</a></li>
	<li><a id="MyLinks1_Syndication" class="menu" href="http://www.cnblogs.com/zhanglong0426/rss">订阅</a>
	<a id="MyLinks1_XMLLink" class="aHeaderXML" href="http://www.cnblogs.com/zhanglong0426/rss"><img src="http://www.cnblogs.com/images/xml.gif" alt="订阅" /></a></li>
</ul>


		<div class="blogStats">
			
			
<!--done-->
随笔- 26&nbsp;
文章- 0&nbsp;
评论- 19&nbsp;

			
		</div><!--end: blogStats -->
	</div><!--end: navigator 博客导航栏 -->
</div><!--end: header 头部 -->

<div id="main">
	<div id="mainContent">
	<div class="forFlow">
		
	
<!--done-->
<div id="topics">
	<div class = "post">
		<h1 class = "postTitle">
			<a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/zhanglong0426/archive/2010/10/07/1845268.html">linux下vim命令详解</a>
		</h1>
		<div class="clear"></div>
		<div class="postBody">
			<div id="cnblogs_post_body"><p>高级一些的编辑器，都会包含宏功能，vim当然不能缺少了，在vim中使用宏是非常方便的：<br /><br />:qx&nbsp;&nbsp;&nbsp;&nbsp; 开始记录宏，并将结果存入寄存器x<br />q&nbsp;&nbsp;&nbsp;&nbsp; 退出记录模式<br />@x&nbsp;&nbsp;&nbsp;&nbsp; 播放记录在x寄存器中的宏命令<br />稍微解释一下，当在normal模式下输入:qx后，你对文本的所有编辑动作将会被记录下来，再次输入q即退出了记录模<br />式，然后输入@x对刚才记录下来的命令进行重复，此命令后可跟数字，表示要重复多少次，比如@x20，可以重复20次。这个在文本的批处理中是非常有用的。<br />同时编辑多个文件<br />在vim众多的插件中，有一个叫minibuffer的插件，就是下面所说的标签页功能了，可以支持同时编辑多个文件。<br />标签命令<br /><br />:tabe fn&nbsp;&nbsp;&nbsp;&nbsp; 在一个新的标签页中编辑文件fn<br />gt&nbsp;&nbsp;&nbsp;&nbsp; 切换到下一个标签页<br />gT&nbsp;&nbsp;&nbsp;&nbsp; 切换到上一个标签页<br />:tabr&nbsp;&nbsp;&nbsp;&nbsp; 切换到第一个标签页<br />:tabl&nbsp;&nbsp;&nbsp;&nbsp; 切换到最后一个标签页<br />:tabm [N]&nbsp;&nbsp;&nbsp;&nbsp; 把当前tab移动到第N个tab之后<br />对，正如你所想象的那样，跟eclipse, ue等的标签页是一个意思！<br />窗口命令<br />ctrl+w s&nbsp;&nbsp;&nbsp;&nbsp; 水平分割窗口<br />ctrl+w w&nbsp;&nbsp;&nbsp;&nbsp; 切换窗口<br />ctrl+w q&nbsp;&nbsp;&nbsp;&nbsp; 退出当前窗口(由于同时有多个文件，此命令不会影响其他窗口)<br />ctrl+w v&nbsp;&nbsp;&nbsp;&nbsp; 垂直分割窗口<br />其他<br />vim在保存之前不会对文件做实际的修改，只是加载到缓冲区中，对文件的编辑其实是对缓冲区的编辑，直到:w时才会存入物理文件。<br /><br />:e file&nbsp;&nbsp;&nbsp;&nbsp; 把file加载到新的缓冲区中<br />:bn&nbsp;&nbsp;&nbsp;&nbsp; 跳转到下一个缓冲区<br />:bd&nbsp;&nbsp;&nbsp;&nbsp; 删除缓冲区(关闭文件)<br />:sp fn&nbsp;&nbsp;&nbsp;&nbsp; 分割窗口，并将fn加载到新的窗口中<br />退出编辑器<br /><br />:w&nbsp;&nbsp;&nbsp;&nbsp; 将缓冲区写入文件，即保存修改<br />:wq&nbsp;&nbsp;&nbsp;&nbsp; 保存修改并退出<br />:x&nbsp;&nbsp;&nbsp;&nbsp; 保存修改并退出<br />:q&nbsp;&nbsp;&nbsp;&nbsp; 退出，如果对缓冲区进行过修改，则会提示<br />:q!&nbsp;&nbsp;&nbsp;&nbsp; 强制退出，放弃修改<br />查找替换<br />/pattern&nbsp;&nbsp;&nbsp;&nbsp; 向后搜索字符串pattern<br />?pattern&nbsp;&nbsp;&nbsp;&nbsp; 向前搜索字符串pattern<br />n&nbsp;&nbsp;&nbsp;&nbsp; 下一个匹配(如果是/搜索，则是向下的下一个，?搜索则是向上的下一个)<br />N&nbsp;&nbsp;&nbsp;&nbsp; 上一个匹配(同上)<br />:%s/old/new/g&nbsp;&nbsp;&nbsp;&nbsp; 搜索整个文件，将所有的old替换为new<br />:%s/old/new/gc&nbsp;&nbsp;&nbsp;&nbsp; 搜索整个文件，将所有的old替换为new，每次都要你确认是否替换<br />复制粘贴<br />dd&nbsp;&nbsp;&nbsp;&nbsp; 删除光标所在行<br />dw&nbsp;&nbsp;&nbsp;&nbsp; 删除一个字(word)<br />x&nbsp;&nbsp;&nbsp;&nbsp; 删除当前字符<br />X&nbsp;&nbsp;&nbsp;&nbsp; 删除前一个字符<br />D&nbsp;&nbsp;&nbsp;&nbsp; 删除到行末<br />yy&nbsp;&nbsp;&nbsp;&nbsp; 复制一行，此命令前可跟数字，标识复制多行，如6yy，表示从当前行开始复制6行<br />yw&nbsp;&nbsp;&nbsp;&nbsp; 复制一个字<br />y$&nbsp;&nbsp;&nbsp;&nbsp; 复制到行末<br />p&nbsp;&nbsp;&nbsp;&nbsp; 粘贴粘贴板的内容到当前行的下面<br />P&nbsp;&nbsp;&nbsp;&nbsp; 粘贴粘贴板的内容到当前行的上面<br />]p&nbsp;&nbsp;&nbsp;&nbsp; 有缩进的粘贴，vim会自动调节代码的缩进<br />"a&nbsp;&nbsp;&nbsp;&nbsp; 将内容放入/存入a寄存器，可以支持多粘贴板<br />附：比如常用的一个寄存器就是系统寄存器，名称为+，所以从系统粘贴板粘贴到vim中的命令为"+p,注意此处的+不表示操作符，二十一个寄存器。<br />移动光标<br />在vim中移动光标跟其他的编辑器中有很大的区别，不过一旦学会了，就会飞速的在文本中移动了。<br /><br />h,j,k,l&nbsp;&nbsp;&nbsp;&nbsp; 上，下，左，右<br />ctrl-f&nbsp;&nbsp;&nbsp;&nbsp; 上翻一页<br />ctrl-b&nbsp;&nbsp;&nbsp;&nbsp; 下翻一页<br />%&nbsp;&nbsp;&nbsp;&nbsp; 跳到与当前括号匹配的括号处，如当前在{，则跳转到与之匹配的}处<br />w&nbsp;&nbsp;&nbsp;&nbsp; 跳到下一个字首，按标点或单词分割<br />W&nbsp;&nbsp;&nbsp;&nbsp; 跳到下一个字首，长跳，如end-of-line被认为是一个字<br />e&nbsp;&nbsp;&nbsp;&nbsp; 跳到下一个字尾<br />E&nbsp;&nbsp;&nbsp;&nbsp; 跳到下一个字尾，长跳<br />b&nbsp;&nbsp;&nbsp;&nbsp; 跳到上一个字<br />B&nbsp;&nbsp;&nbsp;&nbsp; 跳到上一个字，长跳<br />0&nbsp;&nbsp;&nbsp;&nbsp; 跳至行首，不管有无缩进，就是跳到第0个字符<br />^&nbsp;&nbsp;&nbsp;&nbsp; 跳至行首的第一个字符<br />$&nbsp;&nbsp;&nbsp;&nbsp; 跳至行尾<br />gg&nbsp;&nbsp;&nbsp;&nbsp; 跳至文件的第一行<br />gd&nbsp;&nbsp;&nbsp;&nbsp; 跳至当前光标所在的变量的声明处<br />[N]G&nbsp;&nbsp;&nbsp;&nbsp; 跳到第N行，如0G，就等价于gg，100G就是第100行<br />fx&nbsp;&nbsp;&nbsp;&nbsp; 在当前行中找x字符，找到了就跳转至<br />;&nbsp;&nbsp;&nbsp;&nbsp; 重复上一个f命令，而不用重复的输入fx<br />tx&nbsp;&nbsp;&nbsp;&nbsp; 与fx类似，但是只是跳转到x的前一个字符处<br />Fx&nbsp;&nbsp;&nbsp;&nbsp; 跟fx的方向相反<br />),(&nbsp;&nbsp;&nbsp;&nbsp; 跳转到上/下一个语句<br />*&nbsp;&nbsp;&nbsp;&nbsp; 查找光标所在处的单词，向下查找<br />#&nbsp;&nbsp;&nbsp;&nbsp; 查找光标所在处的单词，向上查找<br />`.&nbsp;&nbsp;&nbsp;&nbsp; 跳转至上次编辑位置<br />在屏幕上移动<br /><br />H&nbsp;&nbsp;&nbsp;&nbsp; 移动光标到当前屏幕上最上边的一行<br />M&nbsp;&nbsp;&nbsp;&nbsp; 移动光标到当前屏幕上中间的一行<br />L&nbsp;&nbsp;&nbsp;&nbsp; 移动光标到当前屏幕上最下边的一行<br />书签<br />ma&nbsp;&nbsp;&nbsp;&nbsp; 把当前位置存成标签a<br />`a&nbsp;&nbsp;&nbsp;&nbsp; 跳转到标签a处<br />编辑<br />r&nbsp;&nbsp;&nbsp;&nbsp; 替换一个字符<br />J&nbsp;&nbsp;&nbsp;&nbsp; 将下一行和当前行连接为一行<br />cc&nbsp;&nbsp;&nbsp;&nbsp; 删除当前行并进入编辑模式<br />cw&nbsp;&nbsp;&nbsp;&nbsp; 删除当前字，并进入编辑模式<br />c$&nbsp;&nbsp;&nbsp;&nbsp; 擦除从当前位置至行末的内容，并进入编辑模式<br />s&nbsp;&nbsp;&nbsp;&nbsp; 删除当前字符并进入编辑模式<br />S&nbsp;&nbsp;&nbsp;&nbsp; 删除光标所在行并进入编辑模式<br />xp&nbsp;&nbsp;&nbsp;&nbsp; 交换当前字符和下一个字符<br />u&nbsp;&nbsp;&nbsp;&nbsp; 撤销<br />ctrl+r&nbsp;&nbsp;&nbsp;&nbsp; 重做<br />.&nbsp;&nbsp;&nbsp;&nbsp; 重复上一个编辑命令<br />~&nbsp;&nbsp;&nbsp;&nbsp; 切换大小写，当前字符<br />g~iw&nbsp;&nbsp;&nbsp;&nbsp; 切换当前字的大小写<br />gUiw&nbsp;&nbsp;&nbsp;&nbsp; 将当前字变成大写<br />guiw&nbsp;&nbsp;&nbsp;&nbsp; 将当前字变成小写<br />&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; 将当前行右移一个单位<br />&lt;&lt;&nbsp;&nbsp;&nbsp;&nbsp; 将当前行左移一个单位(一个tab符)<br />==&nbsp;&nbsp;&nbsp;&nbsp; 自动缩进当前行<br /><br />插入模式<br />i&nbsp;&nbsp;&nbsp;&nbsp; 从当前光标处进入插入模式<br />I&nbsp;&nbsp;&nbsp;&nbsp; 进入插入模式，并置光标于行首<br />a&nbsp;&nbsp;&nbsp;&nbsp; 追加模式，置光标于当前光标之后<br />A&nbsp;&nbsp;&nbsp;&nbsp; 追加模式，置光标于行末<br />o&nbsp;&nbsp;&nbsp;&nbsp; 在当前行之下新加一行，并进入插入模式<br />O&nbsp;&nbsp;&nbsp;&nbsp; 在当前行之上新加一行，并进入插入模式<br />Esc&nbsp;&nbsp;&nbsp;&nbsp; 退出插入模式<br />可视模式<br />标记文本<br />v&nbsp;&nbsp;&nbsp;&nbsp; 进入可视模式，单字符模式<br />V&nbsp;&nbsp;&nbsp;&nbsp; 进入可视模式，行模式<br />ctrl+v&nbsp;&nbsp;&nbsp;&nbsp; 进入可视模式，列模式，类似于UE的列模式<br />o&nbsp;&nbsp;&nbsp;&nbsp; 跳转光标到选中块的另一个端点<br />U&nbsp;&nbsp;&nbsp;&nbsp; 将选中块中的内容转成大写<br />O&nbsp;&nbsp;&nbsp;&nbsp; 跳转光标到块的另一个端点<br />aw&nbsp;&nbsp;&nbsp;&nbsp; 选中一个字<br />ab&nbsp;&nbsp;&nbsp;&nbsp; 选中括号中的所有内容，包括括号本身<br />aB&nbsp;&nbsp;&nbsp;&nbsp; 选中{}括号中的所有内容<br />ib&nbsp;&nbsp;&nbsp;&nbsp; 选中括号中的内容，不含括号<br />iB&nbsp;&nbsp;&nbsp;&nbsp; 选中{}中的内容，不含{}<br /><br />对标记进行动作<br />&gt;&nbsp;&nbsp;&nbsp;&nbsp; 块右移<br />&lt;&nbsp;&nbsp;&nbsp;&nbsp; 块左移<br />y&nbsp;&nbsp;&nbsp;&nbsp; 复制块<br />d&nbsp;&nbsp;&nbsp;&nbsp; 删除块<br />~&nbsp;&nbsp;&nbsp;&nbsp; 切换块中内容的大小写</p></div><div id="MySignature"></div>
<script type="text/javascript">
var isLogined = false;
var cb_blogId = 73607;
var cb_entryId = 1845268;
var cb_blogApp = currentBlogApp;
var cb_blogUserGuid = "b465cd2a-fd96-df11-ba8f-001cf0cd104b";
var cb_entryCreatedDate = '2010/10/7 21:18:00';
var enableGoogleAd = true;
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
</script>
<div class="clear"></div>
<div id="blog_post_info_block">
<div id="blog_post_info">
</div>
<div class="clear"></div>
<div id="post_next_prev"></div>
</div>
<script type="text/javascript">
    //SyntaxHighlighter.config.strings.expandSource = '<span><img src="http://static.cnblogs.com/images/expand-code.gif" alt="" class="expand-code-icon"/>View Code</span>';
    $(function () {  
        loadViewCount(cb_entryId);
        fixPostBodyFormat();
        loadAdUnderPost();
        loadBlogSignature();
        LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
        GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate);        
        GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);        
    });
</script>
		</div>
		<div class = "postDesc">posted @ <span id="post-date">2010-10-07 21:18</span> <a href='http://www.cnblogs.com/zhanglong0426/'>zhanglong0426</a> 阅读(<span id="post_view_count">...</span>) 评论(<span id="post_comment_count">...</span>)  <a href ="http://www.cnblogs.com/zhanglong0426/admin/EditPosts.aspx?postid=1845268" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(1845268);return false;">收藏</a></div>
	</div>
	<img src ="http://www.cnblogs.com/zhanglong0426/aggbug/1845268.html?type=1&amp;webview=1" width="1" height="1" alt=""/>
	
</div><!--end: topics 文章、评论容器-->
<div id="blog-comments-placeholder"></div><script type="text/javascript">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script>
<div id="comment_form" class="commentform">
<div id="divCommentShow"></div>
<div id="comment_nav"><span id="span_refresh_tips"></span><a href="javascript:void(0);" id="lnk_RefreshComments" onclick="return RefreshCommentList();">刷新评论</a><a href="#" onclick="return RefreshPage();">刷新页面</a><a href="#top">返回顶部</a></div>
<div id="comment_form_container"></div>

<script type="text/javascript">
    if (typeof commentManager === 'undefined') {
        commentManager = new blogCommentManager();
    }
    commentManager.loadCommentForm();   
</script>

<div class="ad_text_commentbox" id="ad_text_under_commentbox"></div>
<div id="site_nav_under"><a href="http://www.cnblogs.com/" target="_blank" title="程序员的网上家园">博客园首页</a><a href="http://q.cnblogs.com/" target="_blank" title="程序员问答社区">博问</a><a href="http://news.cnblogs.com/" target="_blank" title="IT新闻">新闻</a><a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a><a href="http://job.cnblogs.com/" target="_blank">程序员招聘</a><a href="http://kb.cnblogs.com/" target="_blank">知识库</a></div>
<div id="ad_under_post_holder"></div>
<div id="HistoryToday" class="c_ad_block"></div>
</div>





	</div><!--end: forFlow -->
	</div><!--end: mainContent 主体内容容器-->

	<div id="sideBar">
		<div id="sideBarMain">
			
<!--done-->
<div class="newsItem">
<h3 class="catListTitle">公告</h3>
	<div id="blog-news"></div>
</div>

			<div id="calendar"><div id="blog-calendar" style="displya:none"></div></div>
			
			<DIV id="leftcontentcontainer">
				<div id="blog-sidecolumn"></div>
			</DIV>
			
		</div><!--end: sideBarMain -->
	</div><!--end: sideBar 侧边栏容器 -->
	<div class="clear"></div>
	</div><!--end: main -->
	<div class="clear"></div>
	<div id="footer">
		
<!--done-->
Copyright &copy;2013 zhanglong0426
	</div><!--end: footer -->
</div><!--end: home 自定义的最大容器 -->
<script type="text/javascript" src="http://common.cnblogs.com/script/google-analytics.js"></script>
</body>
</html>
